﻿namespace Vibstudio.NetConfigurator.Globalization
{
    using System.Collections.Generic;
    using System.Text;

    internal class ItalianLabeler : ILabeler
    {
        public Label BackupFiles
        {
            get { return Label.Create("Eseguire il backup dei file?"); }
        }

        public Label ApplicationsFile
        {
            get { return Label.Create("File delle applicazioni"); }
        }

        public Label ConfigurationsFile
        {
            get { return Label.Create("File delle configurazioni"); }
        }

        public Label ConfigurationFile
        {
            get { return Label.Create("File di configurazione"); }
        }

        public Label ChooseApplicationsPathToConfigure
        {
            get { return Label.Create("Scegliere il percorso base delle applicazioni da configurare"); }
        }

        public Label ChooseApplicationsPathToCompose
        {
            get { return Label.Create("Scegliere il percorso base delle applicazioni da comporre"); }
        }

        public Label ChooseApplicationsPathToAutoCompose
        {
            get { return Label.Create("Scegliere il percorso base delle applicazioni da autocomporre"); }
        }

        public Label RunConfiguration
        {
            get { return Label.Create("Esegue la configurazione"); }
        }

        public Label RunComposition
        {
            get { return Label.Create("Esegue la composizione"); }
        }

        public Label GoToHome
        {
            get { return Label.Create("Torna alla pagina iniziale"); }
        }

        public Label ValidateUrl
        {
            get { return Label.Create("Valida le URL"); }
        }

        public Label Application
        {
            get { return Label.Create("Applicazione"); }
        }

        public Label Configuration
        {
            get { return Label.Create("Configurazione"); }
        }

        public Label Composition
        {
            get { return Label.Create("Composizione"); }
        }

        public Label Outcome
        {
            get { return Label.Create("Esito"); }
        }

        public Label Message
        {
            get { return Label.Create("Messaggio"); }
        }

        public Label Url
        {
            get { return Label.Create("URL"); }
        }

        public Label ConfigurationMode
        {
            get { return Label.Create("Modalità configurazione"); }
        }

        public Label CompositionMode
        {
            get { return Label.Create("Modalità composizione"); }
        }

        public Label InvalidURI
        {
            get { return Label.Create("URI non valida"); }
        }

        public Label RunAutoComposition
        {
            get { return Label.Create("Esegue l'autocomposizione"); }
        }

        public Label SuccessfulConfiguration
        {
            get { return Label.Create("Configurazione eseguita correttamente"); }
        }

        public Label SuccessfulComposition
        {
            get { return Label.Create("Composizione eseguita correttamente"); }
        }

        public Label SuccessfulValidation
        {
            get { return Label.Create("Validazione eseguita correttamente"); }
        }

        public Label PartialConfiguration(int percentage)
        {
            return Label.Create(string.Format("Configurazione eseguita parzialmente ({0}%)", percentage));
        }

        public Label PartialComposition(int percentage)
        {
            return Label.Create(string.Format("Composizione eseguita parzialmente ({0}%)", percentage));
        }

        public Label PartialValidaton(int percentage)
        {
            return Label.Create(string.Format("Validazione eseguita parzialmente ({0}%)", percentage));
        }

        public Label ConfigurationNotPerformed
        {
            get { return Label.Create("Configurazione non eseguita"); }
        }

        public Label CompositionNotPerformed
        {
            get { return Label.Create("Composizione non eseguita"); }
        }

        public Label ValidationNotPerformed
        {
            get { return Label.Create("Validazione non eseguita"); }
        }

        public Label OperationNotExecutable
        {
            get { return Label.Create("Impossibile eseguire l'operazione"); }
        }

        public Label DirectoryNotFound
        {
            get { return Label.Create("La directory specificata non esiste"); }
        }

        public Label FileNotFound(string fullPath)
        {
            return Label.Create(string.Format("Impossibile trovare il file '{0}'", fullPath));
        }

        public Label FileNotFoundInDirectory()
        {
            return Label.Create("File non trovato nella directory specificata");
        }

        public Label FileNotFoundInDirectory(string path)
        {
            return Label.Create(string.Format(@"File non trovato nella directory specificata ({0})",
                                              path));
        }

        public Label FileNotFoundInDirectory(string file, string path)
        {
            return Label.Create(string.Format(@"File non trovato ({0}) nella directory specificata ({1})",
                                              file,
                                              path));
        }

        public Label FileNotFoundInDirectory(string file, string rootPath, string folderName)
        {
            return Label.Create(string.Format(@"File non trovato ({0}) nella directory specificata ({1}\...\{2})",
                                              file,
                                              rootPath,
                                              folderName));
        }

        public Label FirstFileConfiguredSuccessfully(string path, int count)
        {
            return Label.Create(string.Format(@"'{0}', primo dei {1} trovati, configurato correttamente",
                                              path,
                                              count));
        }

        public Label UnknownConfigurator(string configuratorName)
        {
            return
                Label.Create(string.Format("Configuratore{0} sconosciuto",
                                           string.IsNullOrEmpty(configuratorName)
                                               ? string.Empty
                                               : string.Format(" \"{0}\"", configuratorName)));
        }

        public Label UnknownComposer(string composerName)
        {
            return Label.Create(string.Format("Compositore{0} sconosciuto",
                                           string.IsNullOrEmpty(composerName)
                                               ? string.Empty
                                               : string.Format(" \"{0}\"", composerName)));
        }

        public Label AutocompositionAlreadyPerformed(string compositionName)
        {
            return Label.Create(string.Format("Composizione{0} gia' eseguita",
                                              string.IsNullOrEmpty(compositionName)
                                              ? string.Empty
                                              : string.Format(" \"{0}\"", compositionName)));
        }

        public Label ApplicationNotReference(string applicationName = "")
        {
            return Label.Create(string.Format("L'applicazione{0} non è quella di riferimento",
                                              string.IsNullOrEmpty(applicationName)
                                                  ? string.Empty
                                                  : string.Format(" \"{0}\"", applicationName)));
        }

        public Label CompositionPartiallyPerformed(IEnumerable<string> unconfiguredSettings)
        {
            var labelBuilder = new StringBuilder();

            labelBuilder.Append("Chiavi di impostazione mancanti:");
            foreach (string setting in unconfiguredSettings)
            {
                labelBuilder.AppendFormat(" {0},", setting);
            }
            labelBuilder.Remove(labelBuilder.Length - 1, 1);

            return Label.Create(labelBuilder);
        }

        public Label BasePathNotSpecified
        {
            get { return Label.Create("Percorso base delle applicazioni da configurare non specificato"); }
        }
    }
}
